package pw.hais.utils;

import java.io.File;
import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * 安卓多屏幕 适配 工具
 * 
 * @author hais1992 http://hais.pw
 */
public class ScreenTools {
	//--------------------【使用工具只需要修改这里，定义 切图的 属性，即 开发机的 信息】----------------------------------------------
	private static final float Image_dpi = 480; // 切图的dpi【写120、160、240、320、480，其它dpi取相近的值】
	private static final float Image_width = 1920; // 切图的 宽
	private static final float Image_height = 1080; // 切图的 高
	//--------------------【使用工具只需要修改这里END】----------------------------------------------
	
	// 适配信息定义
	private static final String prefix = "_"; // 前缀
	private static final int max_px = 2048; // 最大分辨率
	private static final String xml_file_name = "screen_adaptation_dimens.xml"; // xml文件名

	// 定义 要适配的 信息screen_width 和screen_height 一对一
	private static final int screen_dpi[] = { 120, 160, 240, 320, 480 }; // 为以下分辨率适配这几种dpi，暂时也就只有这几种了
	//失配的分配率不够到这里来加
	private static final int screen_width[] = { 1920, 1280, 960, 800, 854, 480 };	
	private static final int screen_height[] = { 1080, 720, 540, 480, 480, 320 };

	// 开始失配
	public static void main(String[] args) {
		if (screen_width.length != screen_height.length) {
			System.err.println("匹配的目标分辨率配置错误screen_width[0]对应screen_height[0]，为一种屏幕");
		} else {
			for (int dpiItem = 0; dpiItem < screen_dpi.length; dpiItem++) {
				for (int item = 0; item < screen_width.length; item++) {
					//生成XML文件
					outXML(screen_dpi[dpiItem], screen_width[item],screen_height[item]);
				}
			}
		}
	}

	/** 写出到 XML */
	public static void outXML(float dpi, float tgtWidth,float tgtHeight) {
		try {
			//获取文件夹名称，如 values-xxhdpi-1280x720
			String filePath = dpiAndSizeToFileame((int)dpi,(int)tgtWidth, (int)tgtHeight);
			// 计算dpi比例
			float dpiRatio=Math.min(tgtWidth / Image_width, tgtHeight/ Image_height); 

			Document document = DocumentHelper.createDocument(); // 创建文件
			Element resources = document.addElement("resources"); // 根节点
			// 循环添加子节点
			float _1pxDpi=0;
			for (int i = 1; i < max_px; i++) {
				//计算 ipx的dpi
				if(Image_dpi == dpi) _1pxDpi=i;
				else _1pxDpi  = i * (float) (Image_dpi / 160);		

				float pxToDpi = _1pxDpi * dpiRatio * 160f / (float) (Image_dpi);		
				Element dimen = resources.addElement("dimen");
				dimen.addAttribute("name", prefix + i + "px");
				dimen.setText(pxToDpi + "dp");
			}
			
			//写入XML		
			createlXML(filePath,resources);
			if(filePath.indexOf("240x320")!=-1)createlXML(filePath.replace("-240x320", ""),resources);
			else if(filePath.indexOf("320x480")!=-1)createlXML(filePath.replace("-320x480", ""),resources);
			else if(filePath.indexOf("480x800")!=-1 || filePath.indexOf("480x854") !=-1)createlXML(filePath.replace("-480x800", "").replace("-480x854", ""),resources);
			else if(filePath.indexOf("1280x720")!=-1)createlXML(filePath.replace("-1280x720", ""),resources);
			else if(filePath.indexOf("1920x1080")!=-1)createlXML(filePath.replace("-1920x1080", ""),resources);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/** 根据dpi 和 屏幕尺寸生成 文件路径 */
	public static String dpiAndSizeToFileame(int dpi, int width, int height) {
		String filePath = System.getProperty("user.dir") + "/screenTools_out/";
		switch (dpi) {
		case 120:
			filePath += "values-ldpi-" + width + "x" + height;
			break;
		case 160:
			filePath += "values-mdpi-" + width + "x" + height;
			break;
		case 240:
			filePath += "values-hdpi-" + width + "x" + height;
			break;
		case 320:
			filePath += "values-xhdpi-" + width + "x" + height;
			break;
		case 480:
			filePath += "values-xxhdpi-" + width + "x" + height;
			break;
		}
		return filePath;
	}
	
	
	/** 创建 XML
	 * @throws Exception 
	 */
	public static void createlXML(String filePath,Element resources) throws Exception {
		File dirFile = new File(filePath); // 设置路径
		if (!dirFile.exists())dirFile.mkdirs(); // 目录不存在，则创建
		// 写出到文件
		File file = new File(dirFile, xml_file_name); // 创建文件
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");// 设置XML文件的编码格式
		XMLWriter writer = new XMLWriter(new FileOutputStream(file, true),format);
		writer.write(resources);
		writer.close();
		System.out.println("已生成：" + filePath);
	}

}
